package com.graduation.project.service.system;

import com.baomidou.mybatisplus.extension.service.IService;
import com.graduation.project.entity.dto.user.ListUserDTO;
import com.graduation.project.entity.dto.user.SaveOrUpdateUserDTO;
import com.graduation.project.entity.dto.UpdateStatusDTO;
import com.graduation.project.entity.dto.UpdateUserInfoByMySelfDTO;
import com.graduation.project.entity.po.User;
import com.graduation.project.utils.ResultUtil;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author 卑微小峰
 * @date 2022/11/05
 * 用户管理业务接口
 */
public interface UserManagementService extends IService<User> {

    /**
     * 添加用户
     * @param input 新增用户输入类
     * @return ResultUtil
     */
    ResultUtil<?> addUser(SaveOrUpdateUserDTO input);

    /**
     * 修改用户
     * @param input 修改用户输入类
     * @return ResultUtil
     */
    ResultUtil<?> updateUser(SaveOrUpdateUserDTO input);

    /**
     * 删除用户
     * @param idList 选中数据项id集合
     * @return ResultUtil
     */
    ResultUtil<?> deleteUserById(List<Long> idList);

    /**
     * 根据id修改状态
     * @param input 修改状态输入类
     * @return ResultUtil
     */
    ResultUtil<?> updateUserStatusById(UpdateStatusDTO input);

    /**
     * （条件）分页查询用户列表
     * @param input 查询用户列表输入类
     * @return ResultUtil
     */
    ResultUtil<?> listRoleByCondition(ListUserDTO input);

    /**
     * 给用户分配角色
     * @param id 用户id
     * @param idList 角色id集合
     * @return ResultUtil
     */
    ResultUtil<?> assignRoleToUser(Long id, List<Long> idList);

    /**
     * 查询当前用户拥有角色
     * @param userId 用户id
     * @return ResultUtil
     */
    ResultUtil<?> listUserRoleByUserId(Long userId);

    /**
     * 查询角色下拉项数据
     * @return ResultUtil
     */
    ResultUtil<?> listRoleOptions();

    /**
     * 查询单位下拉项数据
     * @return ResultUtil
     */
    ResultUtil<?> listUnitOptions();

    /**
     * 重置密码
     * @param id 用户id
     * @param password 用户密码
     * @return ResultUtil
     */
    ResultUtil<?> resetUserPassword(Long id, String password);



    ResultUtil<?> download();

    ResultUtil<?> getUserInfoDetails(String userCode);

    ResultUtil<?> updateUserInfoByMySelf(UpdateUserInfoByMySelfDTO updateUserInfoByMySelfDTO);

    ResultUtil<?> uploadAvatar(MultipartFile file);
}
